#ifndef _TABTIRS_H_
#define _TABTIRS_H_

#include "Tir.h"


/** @brief File brief description
 Le fichier TabTirs.h contient la declaration de toutes les fonctions et procedures necessaires
 au stockage dans un tableau de tous les tirs generes aussi bien par le heros que par les ennemis*/


/** @brief TabTirs est composee d'un tableau de pointeur sur tirs destines à contenir
 * tous les pointeurs sur les tirs du heros mais aussi des ennemis ainsi que le nombre
 * de tirs (un entier)*/
typedef struct
{
	Tir** ptab_tirs;
	int nbre_tirs;
	
} TabTirs;


/** @brief Cette procedure initialise un tableau de pointeurs de tirs a nul
 * @param [in,out] ptab_ptirs
 */
void initTabTirs (TabTirs* ptab_ptirs);

/** @brief Cette fonction alloue l'espace memoire necessaire pour creer un
 * tableau de tirs, l'initialise et renvoie un pointeur sur celui-ci
 */
TabTirs* creerTabTirs ();

/** @brief Cette procedure libere l'espace memoire alloue pour chaque tir
 * contenu dans le tableau et met le champ nbre_tirs a 0
 * @param [in,out] ptab_ptirs
 */
void libereTabTirs (TabTirs* ptab_ptirs);

/** @brief Cette procedure libere l'espace memoire alloue pour un tableau de
 * tirs
 * @param [in,out] pptab_ptirs
 */
void detruireTabTirs (TabTirs** pptab_ptirs);

/** @brief Cette fonction renvoie le nombre de pointeurs sur des tirs contenus
 * dans le tableau
 * @param [in] ptab_ptirs
 * @return ptab_ptirs->nbre_tirs
 */
const int getNbreTirsTabTirs (const TabTirs* ptab_ptirs);

/** @brief Cette procedure permet de changer le nombre de pointeurs sur des
 * tirs contenus dans le tableau
 * @param [in,out] ptab_ptirs
 * @param [in] nbre
 */
void setNbreTirsTabTirs (TabTirs* ptab_ptirs, const int nbre);

/** @brief Cette fonction renvoie le tableau de pointeurs sur des tirs de la
 * structure TabTirs
 * @param [in] ptab_ptirs
 * @return ptab_ptirs->ptab_tirs
 */
Tir** get_ptab_tirsTabTirs (const TabTirs* ptab_ptirs);

/** @brief Cette fonction renvoie un pointeur sur le i-eme tir du tableau
 * @param [in] ptab_ptirs
 * @param [in] i_tir
 */
Tir* getTirTabTirs (const TabTirs* ptab_ptirs, const int i_tir);

/** @brief Cette procedure permet de modifier le i-eme pointeur sur un tir
 * du tableau
 * @param [in,out] ptab_ptirs
 * @param [in] i_tir
 * @param [in] nouveau_tir
 */
void setTirTabTirs (TabTirs* ptab_ptirs, const int i_tir, Tir* nouveau_tir);

/** @brief Cette procedure ajoute dans le tableau de tirs un nouveau tir
 * en prenant pour parametre un pointeur sur ce tir et incremente le champ
 * nbre_tirs
 * @param [in,out] ptab_ptirs
 * @param [in] ptir
 */
void ajouterTir (TabTirs* ptab_ptirs, Tir* ptir);

/** @brief Cette procedure supprime dans le tableau de tirs un ancien tir
 * en prenant pour parametre un pointeur sur ce tir et decremente le champ
 * nbre_tirs
 * @param [in,out] ptab_ptirs
 * @param [in] ptir
 */
void supprimerTir (TabTirs* ptab_ptirs, Tir* ptir);

#endif
